﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GestionRecaudos
{
    public partial class FrmRecaudosGenerar : Form
    {
        double temp = 0;
        int temp2 = 0;

        //--- Datos que se mostraran en la factura
        string
             nombreImpresora = string.Empty;

        public FrmRecaudosGenerar()
        {
            InitializeComponent();
        }

        private void FrmRecaudosGenerar_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'gestionRecaudosDataSet.spRecaudo' Puede moverla o quitarla según sea necesario.
            this.spRecaudoTableAdapter.Fill(this.gestionRecaudosDataSet.spRecaudo);
            // TODO: esta línea de código carga datos en la tabla 'gestionRecaudosDataSet.spPlaca' Puede moverla o quitarla según sea necesario.
            this.spPlacaTableAdapter.Fill(this.gestionRecaudosDataSet.spPlaca);

            //--- Cargo los Parametros
            nombreImpresora = Utils.get().getValorParametro("NombreImpresora");
            
            //--- Limpio la ventana
            this.NuevoButton_Click(null, null);
        }

        private void adicionalTextBox_TextChanged(object sender, EventArgs e)
        {   
            if (double.TryParse(this.adicionalTextBox.Text.Trim(), out this.temp) || this.adicionalTextBox.Text.Trim().Equals(string.Empty))
            {
                this.adicionalTextBox.ForeColor = Color.Black;
            }
            else
            {
                this.adicionalTextBox.ForeColor = Color.Red;
                return;
            }
        }

        private void adicionalTextBox_Leave(object sender, EventArgs e)
        {
            this.adicionalTextBox.Text = Utils.get().getFormatoMoneda(this.adicionalTextBox.Text.Trim());
        }

        private void adicionalTextBox_Enter(object sender, EventArgs e)
        {
            if (double.TryParse(this.adicionalTextBox.Text.Trim(), out this.temp))
            {
                if (this.temp == 0)
                {
                    this.adicionalTextBox.Text = string.Empty;
                }
            }
        }

        private void NuevoButton_Click(object sender, EventArgs e)
        {
            this.placaBuscadorAWIL.AWIL_Texto = string.Empty;
            this.adicionalTextBox.Text = Utils.get().getFormatoMoneda(0);
            this.observacionesTextBox.Text = string.Empty;
            this.cartulinasDataGridView.Rows.Clear();
            this.guardarImprimirButton.Enabled = true;
            this.adicionarButton.Enabled = true;
            this.quitarButton.Enabled = true;
            
            try
            {
                string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[Utils.get().getValorParametro("SeccionAppConfigGestionRecaudosConnectionString")].ConnectionString;
                DataTable table = new DataTable();
                table.TableName = this.tittle.Text;
                using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connectionString))
                {
                    conn.Open();
                    System.Data.SqlClient.SqlCommand command = conn.CreateCommand();
                    command.CommandType = CommandType.StoredProcedure;
                    command.CommandText = "[spCartulina]";
                    command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@OP", "ObtenerConsecutivoCartulina"));
                    table.Load(command.ExecuteReader());
                    conn.Close();
                }
                this.cartulinasDataGridView.Rows.Add("", table.Rows[0][0].ToString());
                this.actualizarConsecutivosCartulinas();
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
            }


        }

        private void adicionarButton_Click(object sender, EventArgs e)
        {
            int temp;
            string temp2;

            if (cartulinasDataGridView.Rows.Count<=0)
            {
                temp2 = string.Empty;
            }
            else if (cartulinasDataGridView.Rows[cartulinasDataGridView.Rows.Count - 1].Cells["NumeroCartulina"].Value == null)
            {
                temp2 = string.Empty;
            }
            else if (!int.TryParse(cartulinasDataGridView.Rows[cartulinasDataGridView.Rows.Count - 1].Cells["NumeroCartulina"].Value.ToString(), out temp))
            {
                temp2 = string.Empty;
            }
            else
            {
                temp2 = (temp + 1).ToString();
            }

            this.cartulinasDataGridView.Rows.Add(this.cartulinasDataGridView.Rows.Count + 1, temp2);
            this.actualizarConsecutivosCartulinas();
        }

        private void quitarButton_Click(object sender, EventArgs e)
        {
            if (this.cartulinasDataGridView.SelectedRows.Count == 0)
            {
                return;
            }

            if (this.cartulinasDataGridView.SelectedRows[0].IsNewRow)
            {
                return;
            }
            this.cartulinasDataGridView.Rows.Remove(this.cartulinasDataGridView.SelectedRows[0]);
            this.actualizarConsecutivosCartulinas();
        }

        private void cartulinasDataGridView_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            this.actualizarConsecutivosCartulinas();
        }

        private void cartulinasDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            this.actualizarConsecutivosCartulinas();
        }

        private void actualizarConsecutivosCartulinas()
        {
            int i = 1;
            foreach (DataGridViewRow row in this.cartulinasDataGridView.Rows)
            {
                row.Cells["Consecutivo"].Value = (i++).ToString();
            }

            if (this.cartulinasDataGridView.Rows.Count > 0)
            {
                this.cartulinasDataGridView.Rows[this.cartulinasDataGridView.Rows.Count - 1].Selected = true;
            }
        }

        private void guardarImprimirButton_Click(object sender, EventArgs e)
        {
            //--- Valido toda la informacion
            if (this.placaBuscadorAWIL.AWIL_Texto.Trim().Equals(string.Empty) || !this.placaBuscadorAWIL.AWIL_ValorCorrecto)
            {
                MessageBox.Show("Debe seleccionar una placa Valida.");
                this.placaBuscadorAWIL.Focus();
                return;
            }
            if (!double.TryParse(this.adicionalTextBox.Text.Trim(), out this.temp))
            {
                MessageBox.Show("Digite un valor Adicional correcto.");
                this.adicionalTextBox.Focus();
                return;
            }
            if (this.cartulinasDataGridView.Rows.Count <= 0)
            {
                MessageBox.Show("Debe agregar almenos una cartulina al Recaudo.");
                this.cartulinasDataGridView.Focus();
                return;
            }
            foreach (DataGridViewRow row in this.cartulinasDataGridView.Rows)
            {
                if (!row.IsNewRow)
                {
                    if (!int.TryParse(row.Cells["NumeroCartulina"].Value.ToString(), out this.temp2))
                    {
                        MessageBox.Show("El codigo de la cartulina indicada en la fila " + row.Cells["Consecutivo"].Value.ToString() + " no es Valido. Verifique");
                        this.cartulinasDataGridView.Focus();
                        return;
                    }
                }
            }
            if (!ImprimirTickets.get().impresoraExiste(this.nombreImpresora))
            {
                MessageBox.Show("La impresora \"" + this.nombreImpresora + "\" NO Existe. Verifique!");
                return;
            }


            try
            {
                //--- Guardo e Imprimo el Ticket
                string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[Utils.get().getValorParametro("SeccionAppConfigGestionRecaudosConnectionString")].ConnectionString;
                DataTable table = new DataTable();
                table.TableName = this.tittle.Text;
                using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connectionString))
                {
                    conn.Open();
                    System.Data.SqlClient.SqlCommand command = conn.CreateCommand();
                    command.CommandType = CommandType.StoredProcedure;
                    command.CommandText = "[spRecaudo]";
                    command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@OP", "GenerarRecaudo"));
                    command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ParamAuxiliar", Utils.get().dataGridViewToXML(this.cartulinasDataGridView)));
                    command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CodPlaca", this.placaBuscadorAWIL.AWIL_Texto));
                    command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Observaciones", this.observacionesTextBox.Text.Trim()));
                    command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ValorAdicional", this.temp));
                    table.Load(command.ExecuteReader());
                    conn.Close();
                }

                if (!table.Rows.Count.Equals(0))
                {
                    //--- Imprimir Copia Cliente
                    if (!ImprimirTickets.get().imprimirRecaudos(table, "- CLIENTE -"))
                    {
                        return;
                    }
                    //--- Imprimir Copia Vendedor
                    if (!ImprimirTickets.get().imprimirRecaudos(table, "- VENDEDOR -"))
                    {
                        return;
                    }
                }

                this.NuevoButton_Click(null, null);
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
                return;
            }
        }

        private void sumatoriaButton_Click(object sender, EventArgs e)
        {
            FrmShowTotalVendido frm= new FrmShowTotalVendido();
            frm.BloquearFechas = true;
            frm.ShowDialog();
        }

        
        //private bool Imprimir(DataTable datos, string TipoTicket)
        //{
        //    try
        //    {
        //        //--- Cabecera
        //        ticket = new Ticket();
        //        DateTime fecha;

        //        if (!DateTime.TryParse(datos.Rows[0]["FechaGrab"].ToString(), out fecha))
        //        {
        //            fecha = DateTime.Now;
        //        }

        //        //ticket.HeaderImage = Utils.get().fileToImage("D:\\.NET - PROYECTOS\\GestionRecaudos\\GestionRecaudos\\Images\\xls.bmp"); //esta propiedad no es obligatoria

        //        ticket.AddHeaderLine(this.nombreEmpresa, true, ticket.fontSize);
        //        ticket.AddHeaderLine("" + this.direccionEmpresa, false, ticket.fontSize);
        //        ticket.AddHeaderLine("N.I.T.: " + this.nitEmpresa, false, ticket.fontSize);

        //        ticket.AddSubHeaderLine("Fecha/Hora:   " + fecha.ToShortDateString() + " " + fecha.ToShortTimeString(), false, ticket.fontSize);
        //        ticket.AddSubHeaderLine("Recaudo No.: " + datos.Rows[0]["CodRecaudo"].ToString(), false, ticket.fontSize);
        //        ticket.AddSubHeaderLine("Placa:             " + datos.Rows[0]["CodPlaca"].ToString(), true, ticket.fontSize);
        //        //ticket.AddSubHeaderLine(string.Empty, false, ticket.fontSize);
        //        ticket.AddSubHeaderLine(new String('=', ticket.maxChar), false, ticket.fontSize);
        //        ticket.AddSubHeaderLine("Numero de Cartulinas: " + datos.Rows[0]["NumeroCartulinas"].ToString(), false, ticket.fontSize);
        //        ticket.AddSubHeaderLine("Cartulinas:", false, ticket.fontSize);
        //        ticket.AddSubHeaderLine(datos.Rows[0]["Cartulinas"].ToString(), true, ticket.fontSize);
        //        ticket.AddSubHeaderLine(string.Empty, false, ticket.fontSize);
        //        ticket.AddSubHeaderLine(new String('=', ticket.maxChar), false, ticket.fontSize);
        //        //ticket.AddSubHeaderLine(string.Empty, false, ticket.fontSize);
        //        ticket.AddSubHeaderLine("SubTotal:  $" + Utils.get().getFormatoMoneda(datos.Rows[0]["SubTotal"].ToString()), false, ticket.fontSize);
        //        ticket.AddSubHeaderLine("Adicional: $" + Utils.get().getFormatoMoneda(datos.Rows[0]["ValorAdicional"].ToString()), false, ticket.fontSize);
        //        ticket.AddSubHeaderLine("TOTAL:   $" + Utils.get().getFormatoMoneda(datos.Rows[0]["Total"].ToString()), true, ticket.fontSize);
        //        //ticket.AddSubHeaderLine(string.Empty, false, ticket.fontSize);
        //        ticket.AddSubHeaderLine(new String('_', ticket.maxChar), false, ticket.fontSize);
        //        //ticket.AddSubHeaderLine(string.Empty, false, ticket.fontSize);
        //        ticket.AddSubHeaderLine(datos.Rows[0]["Observaciones"].ToString(), false, ticket.fontSize);
        //        ticket.AddSubHeaderLine(string.Empty, false, ticket.fontSize);
        //        ticket.AddSubHeaderLine("Vendedor: " + datos.Rows[0]["UserName"].ToString(), false, ticket.fontSize);
        //        ticket.AddSubHeaderLine(string.Empty, false, ticket.fontSize);

        //        ticket.AddSubFooterLine("Telefonos: "+this.telefonoEmpresa, false, ticket.fontSize);
        //        ticket.AddSubFooterLine(""+this.ciudadEmpresa, false, ticket.fontSize);
        //        ticket.AddSubFooterLine("-" + TipoTicket + "-", true, ticket.fontSize);

        //        ///---- Imprimir el Ticket!!!
        //        ticket.PrintTicket(this.nombreImpresora);
        //        return true;
        //    }
        //    catch (Exception ex)
        //    {
        //        MessageException.show(ex);
        //        return false;
        //    }
        //}
    }
}
